package com.polaris.live.resp.back_resp

import android.os.Parcelable
import com.polaris.live.constant.LiveConst
import com.polaris.live.im.sfs.bean.live.ext.UserBasicVo

/**
 * ServerResultCallStartVo，服务返回
 */
@kotlinx.parcelize.Parcelize
data class CallStartResp(
    /**
     * 应答方信息
     */
    val answer: UserBasicVo,
    /**
     * 通话信息
     */
    val call: CallVo,
    /**
     * 展示图
     */
    val cover: String? = null,
) : Parcelable

/**
 * CallVo，通话vo
 */
@kotlinx.parcelize.Parcelize
data class CallVo(
    /**
     * 通话id
     */
    val id: Long,
    /**
     * 用户 ID
     */
    val userId: Long,
    /**
     * 发起方id
     */
    val senderId: Long,
    /**
     * 应答方 ID
     */
    val answerId: Long,
    /**
     * 付费方用户id
     */
    val payUserId: Long,
    /**
     * 受益方用户id
     */
    val benefitUserId: Long,
    /**
     * 支付时间
     */
    val payTime: Long? = null,
    /**
     * 状态
     *
     * @see LiveConst.CallState
     */
    var status: Int,
    /**
     * 通话时长
     */
    val onlineTime: Int,
    /**
     * 获取时间
     */
    var getTime: Long? = null,
    /**
     * 应答方消费的钻石+赠送钻石
     */
    val userCoin: Long = 0,
    /**
     * 应答方消费的礼物token
     */
    val userGiftCoin: Long = 0,
    /**
     * 发起方礼物所得
     */
    val userGiftGainCoin: Long = 0,
    /**
     * 发起方通话所得 beans  (付费)
     */
    val userGainCoin: Long = 0,
    /**
     * 发起方通话所得 point  (免费)
     */
    val userSendGainCoin: Long = 0,
    /**
     * 创建时间
     */
    val createTime: Long,
    /**
     * 是否试用
     */
    val trial: Boolean = false,
    /**
     * 是否开启同声传译
     */
    var simulInterpret: Boolean = false,
    /**
     * 付费方实际支付coin
     */
    val payCoin: Long = 0,
    /**
     * 付费方实际支付sendCoin
     */
    val paySendCoin: Long = 0,
    /**
     * 收益方实际收益 bonus
     */
    val benefitGainCoin: Long = 0,
    /**
     * 收益方实际收益 point
     */
    val benefitSendGainCoin: Long = 0,
    /**
     * 发起来源
     */
    val userFrom: Int,
    /**
     * 是否关注
     */
    val follow: Boolean = false,
    /**
     * 语言相同
     */
    val sameLanguage: Boolean = false,
    /**
     * 通话价格
     */
    val price: Long,
    /**
     * 推流地址
     */
    val pushStreamId: String,
    /**
     * 拉流地址
     */
    val playStreamId: String,
    /**
     * 免费通话
     */
    var earnings: Long = 0,
    /**
     * 周星活动
     */
    val starCall: Boolean = false,
    /**
     * 截图规则
     */
    val screenshotStrategy: ScreenshotStrategyVo? = null,
    /**
     * 直播流id
     */
    val liveStreamId: String? = null,
    /**
     * 加密的同声传译秘钥
     */
    val simultaneousEncrypt: String? = null,
    /**
     * 游戏类型
     * @see PartyGameType
     */
    val gameType: Int?,
    /**
     * 游戏miniId
     */
    val gameMiniId: String?,
    /**
     * 资产类型
     * @see PartyGameAssetType
     */
    val gameAssetType: Int?,
    /**
     * 游戏价格
     */
    val gamePrice: Long?,
) : Parcelable

/**
 * ScreenshotStrategyVo，截图规则返回
 */
@kotlinx.parcelize.Parcelize
data class ScreenshotStrategyVo(
    /**
     * 根据上面的规则解析
     * 1 12 5
     * 13 18 10
     * 19 21 20
     * 21 null 20
     */
    val baseRules: List<ScreenshotStrategyBaseVo>,

    /**
     * 截图规则<第几分钟,截图间隔>
     *
     * 最后的一分钟代表持续到永久
     *
     * 比如规则是：1 - 5, 2 - 10, 3 - 20
     * 这代表第一分钟每隔5秒截一张图，第二分钟每隔10秒截一张图，第三分钟每隔20秒截一张图，并且之后的每一分钟都每隔20秒截一张图
     *
     * 如果规则是：1 - 5
     * 这代表第一分钟每隔5秒截一张图，之后的每一分钟都每隔5秒截一张图
     */
    val rules: Map<String, Long>,
) : Parcelable

/**
 * ScreenshotStrategyBaseVo，截图规则返回
 */
@kotlinx.parcelize.Parcelize
data class ScreenshotStrategyBaseVo(
    /**
     * 结束
     */
    val end: Long? = null,

    /**
     * 间隔
     */
    val interval: Int,

    /**
     * 开始
     */
    val start: Long,
) : Parcelable